package com.springboot.study.pojo;

import jakarta.persistence.*;               // JPA注解，提供实体映射和数据库表结构定义功能
import jakarta.validation.constraints.*;  // Bean Validation 注解，用于字段校验
import lombok.AllArgsConstructor;           // Lombok注解，自动生成全参构造器
import lombok.Data;                         // Lombok注解，自动生成getter/setter、toString、equals、hashCode
import lombok.NoArgsConstructor;            // Lombok注解，自动生成无参构造器
/**
 * LoginInfo 实体类，用于 JPA 映射登录信息表
 */
@Data                                       // 自动生成常用方法（getter/setter/toString/equals/hashCode）
@NoArgsConstructor                          // 生成无参构造器，JPA实体需要
@AllArgsConstructor                         // 生成全参构造器，方便实例化对象
@Entity                                    // 标注该类为JPA实体类，映射数据库表
@Table(name = "login_info")                 // 指定映射的数据库表名为 login_info，默认是类名小写
public class LoginInfo {

    @Id                                    // 标识主键字段
    @GeneratedValue(strategy = GenerationType.IDENTITY)  // 主键自增策略，数据库自动生成ID
    private Long id;

    @NotBlank(message = "用户名不能为空")         // 验证用户名不能为空（null或空字符串）
    @Size(max = 50, message = "用户名长度不能超过50") // 验证用户名最大长度50字符
    @Column(nullable = false, length = 50, unique = true)  // 数据库列配置：非空、长度50、唯一
    private String username;                 // 登录用户名，唯一且不能为空

    @NotBlank(message = "密码不能为空")           // 验证密码不能为空
    @Size(max = 100, message = "密码长度不能超过100") // 验证密码最大长度100字符
    @Column(nullable = false, length = 100)    // 数据库列配置：非空，长度100
    private String password;                 // 登录密码，不能为空

    @Email(message = "邮箱格式不正确")            // 验证邮箱格式合法
    @Size(max = 100, message = "邮箱长度不能超过100") // 验证邮箱最大长度100字符
    @Column(length = 100)                      // 数据库列配置：长度100，可为空（默认允许null）
    private String email;                    // 邮箱，可为空

    @Pattern(regexp = "\\d{10,20}", message = "电话格式错误，只能是10到20位数字")  // 验证电话格式必须为10-20位数字
    @Column(length = 20)                      // 数据库列配置：长度20，可为空
    private String phone;                    // 电话号码，可为空
}
